/*
 * ModeloMatrizCorrelacion.java
 *
 * Created on 20 de febrero de 2006, 09:05 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */
package ig.metrica.ui.matrizcorrelacion;

import ejb.metrica.matriz.correlacion.MatrizCorrelacionSBBean;
import ejb.metrica.matriz.correlacion.MatrizDTO;
import ig.metrica.riesgo.MatrizCorrelacionPK;
import ig.metrica.riesgo.ZonaDTO;
import ig.metrica.ui.interfaces.comunes.IModelo;
import ig.util.CodigoBotones;
import ig.util.ConexionServer;
import ig.util.NoContinuaException;
import ig.util.ejb.IGBean;
import java.rmi.RemoteException;
import java.util.Collection;
import java.util.Hashtable;
import java.util.Properties;
import javax.ejb.FinderException;
import javax.ejb.RemoveException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

/**
 *
 * @author jsanchez
 */
public class ModeloEscaleraDeBandas implements IModelo {

    private PantallaEscaleraDeBandas panel = null;
    private Object[][] obj = null;
    //private Double [][]  DataMatriz=null;
//    private String[] nameColumnas = {};
//    private MatrizCorrelacionHome home=null;
    private boolean nuevo = false;
//    private MatrizCorrelacion matrizCorrelacion = null;
//    private MatrizCorrelacionPK pk = null;
//    private Collection factoresRiesgos = null;
    private Properties prop = null;
    

    {
        prop = new Properties();
        prop.put(Context.INITIAL_CONTEXT_FACTORY, IGBean.INITIAL_CONTEXT_FACTORY);
        String Sockec = new ConexionServer().getSocketServer();
        prop.put(Context.PROVIDER_URL, Sockec);
    }
    private MatrizDTO DTO = null;

    /** Creates a new instance of ModeloMatrizCorrelacion */
    public ModeloEscaleraDeBandas(PantallaEscaleraDeBandas panel) {
        this.panel = panel;
    }

    private Hashtable getCamposAdicionales() {
        Hashtable<String, Object> htable = new Hashtable<String, Object>();
        //htable.put("TIPO", panel.getTipo());
        //htable.put("ZONAS", panel.getZonas());
        //htable.put("AJUSTES_ALTERNOS", panel.getAjustesAlternos());
        htable.put("DTO", panel.getDTO());
        htable.put("FACTORES_EXTRAS", panel.getFactoresExternos());
        return htable;
    }

    //@Override
    public void guardar() throws NoContinuaException {
        if (isNuevo()) {
            try {
                this.setId(this.lookupMatrizCorrelacionSBBean().create(this.getCamposAdicionales()));
            /*} catch (RemoteException ex) {
                ex.printStackTrace();
                throw new NoContinuaException("Metrica no pudo crear la escalera de bandas " + ex);*/
            } catch (Exception ex) {
                ex.printStackTrace();
                throw new NoContinuaException("Metrica no pudo crear la escalera de bandas " + ex);
            }
        } else {
            try {
                this.lookupMatrizCorrelacionSBBean().update(this.getCamposAdicionales());
                JOptionPane.showMessageDialog(panel, "la Matriz se actualiz\u00F3 satisfactoriamente.", "Mensaje", JOptionPane.OK_CANCEL_OPTION);
                setNuevo(false);
            } catch (RemoteException ex) {
                ex.printStackTrace();
                JOptionPane.showMessageDialog(panel, "No se pudo guardar los datos de la matriz\n" + ex.toString(), "Mensaje", JOptionPane.OK_OPTION);
            } catch (Exception ex) {
                ex.printStackTrace();
                JOptionPane.showMessageDialog(panel, "No se pudo guardar los datos de la matriz\n" + ex.toString(), "Mensaje", JOptionPane.OK_OPTION);
            }
        }
    }
    private InitialContext ctx = null;

    public void setTipo(Integer tipo) {
        this.DTO.setTipo(tipo);
    }

    //@Override
    public Collection buscar() throws NoContinuaException {
        this.panel.limpiarTablas("m-1");
        try {
            Hashtable<String, Object> llega = this.lookupMatrizCorrelacionSBBean().findById(this.getId());
            panel.setZonas((Collection<ZonaDTO>) llega.get("ZONAS"));
            panel.setAjustes((Collection<ig.metrica.riesgo.AjustesAlternosDTO>) llega.get("AJUSTES_ALTERNOS"));
            this.DTO = (MatrizDTO) llega.get("DTO");
            panel.setDataMatriz(String.valueOf(DTO.getId()), DTO.getNombre(), DTO.getDescripcion(), getFecha(DTO.getFechaPublicacion().toString()));
            panel.setID(DTO.getId());
        } catch (Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(this.panel, "Error: \n" + e.toString());
        }
        return null;
    }

    //@Override
    public void modificar() throws NoContinuaException {
        setNuevo(false);
    }

    //@Override
    public void nuevo() throws NoContinuaException {
        setNuevo(true);
        this.DTO = new MatrizDTO();
    }

    //@Override
    public void eliminar() throws NoContinuaException {
        String mensaje = null;
        try {
            this.lookupMatrizCorrelacionSBBean().remove(getId());
            return;
        } catch (FinderException e) {
            e.printStackTrace();
            mensaje = "Metrica no pudo encontra la matriz con el ID especificado: " + e;
        } catch (RemoveException ex) {
            ex.printStackTrace();
            mensaje = "Metrica no pudo eliminar el objeto seleccionado: " + ex;
        } catch (RemoteException ex) {
            ex.printStackTrace();
            mensaje = "Metrica no pudo conectarce con el Servidor: " + ex;
        } catch (Exception ex) {
            mensaje = "Metrica no pudo conectarce con el Servidor: " + ex;
            ex.printStackTrace();
        }
        panel.getInternalFrame().setEstado(CodigoBotones.grupoEntrada);
        JOptionPane.showMessageDialog(this.panel, mensaje, "Mensaje", JOptionPane.OK_OPTION);
    }

    //@Override
    public void salir() throws NoContinuaException {
    }

    //@Override
    public void imprimir() throws NoContinuaException {
    }

    //@Override
    public Object getTO() throws NoContinuaException {
        return null;
    }

    public void adicionarFactor() {
    }

    //@Override
    public void cancelar() throws NoContinuaException {
        setNuevo(false);
    }

    public void cerrando() throws NoContinuaException {
    }

    public JFrame getRootPanel() {
        return this.panel.getFrame();
    }
    private Integer id = null;

    public Integer getId() {
        if (id != null) {
            return this.id;
        } else {
            return panel.getId();
        }
    }

    public void setId(Integer id) {
        this.id = id;
        if (DTO == null) {
            this.DTO = new MatrizDTO();
        }
        this.DTO.setId(id);
    }

    public void setDTO(MatrizDTO dto) {
        this.DTO = dto;
        this.id = dto.getId();
    }

    void setEstado() {
        if (panel.getESTADO().trim() == "" || panel.getESTADO().equals("N")) {
            panel.getInternalFrame().setEstado(CodigoBotones.grupoEntrada);
        } else if (panel.getESTADO().equals("M")) {
            panel.getInternalFrame().setEstado(CodigoBotones.grupoEntrada + CodigoBotones.eliminar + CodigoBotones.modificar);
        }
    }

    private String getFecha(String string) {
        String ANNO = string.substring(0, 4);
        String DIA = string.substring(5, 7);
        String MES = string.substring(8);
        return DIA + MES + ANNO;
    }

    private ejb.metrica.matriz.correlacion.MatrizCorrelacionSBBean lookupMatrizCorrelacionSBBean() {
        return new MatrizCorrelacionSBBean();
        /*try {
            javax.naming.Context c = new javax.naming.InitialContext(prop);
            Object remote = c.lookup("MatrizCorrelacionSBBean");
            ejb.metrica.matriz.correlacion.MatrizCorrelacionSBRemoteHome rv = (ejb.metrica.matriz.correlacion.MatrizCorrelacionSBRemoteHome) javax.rmi.PortableRemoteObject.narrow(remote, ejb.metrica.matriz.correlacion.MatrizCorrelacionSBRemoteHome.class);
            return rv.create();
        } catch (javax.naming.NamingException ne) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,ne);
            throw new RuntimeException(ne);
        } catch (javax.ejb.CreateException ce) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,ce);
            throw new RuntimeException(ce);
        } catch (java.rmi.RemoteException re) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,re);
            throw new RuntimeException(re);
        }*/
    }

    public boolean isNuevo() {
        return nuevo;
    }

    public void setNuevo(boolean nuevo) {
        this.nuevo = nuevo;
    }
}
